<?php
namespace app\index\controller;
use app\api\controller\Common;
use think\Controller;
use think\Db;
use think\Loader;
use think\Model;
class Import extends Base
{
        public  function index(){
            return view();
        }
            //接受上传的文件
        public function upload(){
        if (request()->ispost()) {
            $post = input('post.');
            $file = request()->file('excel');
            if(empty($file)){
                $this->error('上传失败**不能为空','import/index');
            }
            //dump($file);die;
            $this->excel_import($file);
        }
    }
            //处理上传的文件模块 excel
        public function excel_import($file){

            //这儿设置个超时时间
            // dump($file);die;
            // 移动到框架应用根目录/public/uploads/ 目录下
            $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads' . DS . 'excel');
            if ($info) {
                //获取文件所在目录名
                $path = ROOT_PATH . 'public' . DS . 'uploads' . DS . 'excel/' . $info->getSaveName();
                //加载PHPExcel类
                // vendor("PHPExcel.PHPExcel");
                Loader::import('PHPExcel.PHPExcel');
                Loader::import('PHPExcel.PHPExcel.IOFactory.PHPExcel_IOFactory');
                //实例化PHPExcel类（注意：实例化的时候前面需要加'\'）
                // $objReader=new \PHPExcel_Reader_Excel5();
                $filename = $info->getSaveName();
                //获取文件名后缀
                $suf = substr($filename, strrpos($filename, '.'));
                if ($suf == '.xlsx') {
                    $objReader = new \PHPExcel_Reader_Excel2007();
                } else if($suf == '.xls'){
                    $objReader = new \PHPExcel_Reader_Excel5();
                }else{
                    $this->error('文件类型错误**请选择 .xlsx***.xls','import/index');
                }
                $objPHPExcel = $objReader->load($path, $encode = 'utf-8'); //获取excel文件

                $cur = $objPHPExcel->getSheet();  // 读取第一个表
                $sheet = $objPHPExcel->getSheet(0); //激活当前的表
                $highestRow = $sheet->getHighestRow(); // 取得总行数
                $highestColumn = $sheet->getHighestColumn(); // 取得总列数 C

                //不大于5列
                if($highestColumn<2 && $highestColumn > 1){
                    $this->error('当前仅仅支持最大 2 列 ， 请修改','import/index');
                }

                //获取上传的文件 列名
                $columnname['A'] = $objPHPExcel->getActiveSheet()->getCell("A" . 1)->getValue();
                $columnname['B'] = $objPHPExcel->getActiveSheet()->getCell("B" . 1)->getValue();

                //去除数据中的null值 去掉 NULL  FALSE  负值
                $columnname = $this->CheckColumNameError(array_filter($columnname));

                //判断如果$columnname 第一列不是ybid  就返回
                if($columnname['A'] !== 'ybid'){
                    $this->error('第一列必须为**ybid**请修改','import/index');
                }

                $a = 0;
                //将表格里面的数据循环到数组中
                for ($i = 2; $i <= $highestRow; $i++) {
                    //*为什么$i=2? (因为Excel表格第一行应该是姓名，年龄，班级，从第二行开始，才是我们要的数据。)
                    $data[$a]['A'] = $objPHPExcel->getActiveSheet()->getCell("A" . $i)->getValue(); //
                    $data[$a]['B'] = $objPHPExcel->getActiveSheet()->getCell("B" . $i)->getValue(); //

                    if(empty($data[$a]['A']) || empty($data[$a]['B'])){
                        break;
                    }

                   //这里开始执行更新

                    //先判断下 ybid 是否存在
                    if(Model('report')->UpdateImportByYbid(trim($data[$a]['A']),trim($data[$a]['B']),$columnname['B'])){
                        // 这里的数据根据自己表格里面有多少个字段自行决定
                        //重新生成报告
                        Model('common')->ModifyReportStatus(trim($data[$a]['A']));
                        $a++;
                    }else{
                        $this->error("**执行失败**第.$i.行",'import/index');
                    }
                    //为 false 执行失败*/
                }
                //更新完了   --记录日志
                //log记录修改信息
                $filelogaddress =  DS . 'excel/' . $info->getSaveName();
                Model('Log')->addLog("Excel导入修改了一共**.$highestRow.**条*".$columnname['B'].".*记录**路径{$filelogaddress}",1,substr($columnname['A'],5));
                //
                $this->success("更新修改成功{$highestRow}条记录",'import/index');
            } else {
                // 上传失败获取错误信息
                $this->error("处理上传数据失败.$file->getError().",'import/index');
            }
        }
        //检查列名
        public  function  CheckColumNameError($columnname){
                foreach ($columnname as $key =>$val){
                    //调用 getPrcToField  进行判断是否为错误的列名
                    if(!($this->getPrcToField($val))){
                        $this->error("有错误的列名不存在*** .$val. ",'import/index');
                    }
                    //列名 正常
                    $columnname[$key] = $this->getPrcToField($val);
                }
            return $columnname;
        }
    /***
     * 根据表格列名  来判断返回对应的 数据库 字段
     */
    public function getPrcToField($str){
        if(in_array($str,array('医院条码','千麦条码','条码','中心条码','ybid'))){
            return 'ybid';
        }elseif (in_array($str,array('身份证','身份证号','条码','身份证号/护照','idnumber'))){
            return 'idnumber';
        }elseif (in_array($str,array('病人姓名','姓名','送检姓名','brxm'))){
            return 'brxm';
        }
        elseif (in_array($str,array('医院条码','客户条码','修改医院条码','yytm'))){
            return 'yytm';
        }
        elseif (in_array($str,array('备注','地址','beizhu'))) {
            return 'beizhu';
        }
        elseif (in_array($str,array('采集时间','地址','cjtime'))) {
            return 'cjtime';
        }
        elseif (in_array($str,array('旧条码','precode'))) {
            return 'precode';
        }
        elseif (in_array($str,array('新条码','newcode'))) {
            return 'newcode';
        }
        elseif (in_array($str,array('brnl','年龄'))) {
            return 'brnl';
        }
        return false;
    }

    //价格-导入-程序
        public  function Prices(){

            return view('import/prices');
        }


}